package com.kaifamiao.schedule;

/**
 * 1、守护线程(daemon thread) 也被称作 精灵线程 或 后台线程
 * 2、所有的 非守护线程 终结之前，守护线程一直运行，
 *    直到所有 非守护线程 都终结，守护线程就会自动终结
 * 3、非守护线程 也被称作 前台线程
 */
public class DaemonTest {

    // 创建并启动守护线程
    public static void startDaemon(String name) {

        Runnable runnable = () -> {
            Thread current = Thread.currentThread();
            while (true) {
                System.out.printf( "name: %s, daemon: %s\n", current.getName(), current.isDaemon() );
            }
        };

        Thread t = new Thread(runnable, name);
        // 将 t 对应的线程设置为 守护线程 (daemon thread)
        t.setDaemon(true);
        // 启动线程
        t.start();
    }

    public static void main(String[] args) throws InterruptedException {
        Thread x = Thread.currentThread();
        String name = x.getName();
        System.out.printf( "%s begin...\n", name );

        startDaemon("守护神");

        Thread.sleep( 10000L ); // 让当前线程睡眠

        System.out.printf( "%s end.\n", name );
    }

}
